﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Segmentator.IntegrityThroughInterval
{
    /**
     * Класс разбивает входную знаковую последовательность
     * на интервалы по первому методу Гуменюка.
     */
    class SplitByInterval
    {

        /**
         * Метод находит последовательность интервалов для каждого символа
         * Последовательность интервалов !!!!не отсортирована по убыванию!!!!
         */
        public Intervals split(long[] order)
        {
            int numChar = 0; // номер символа в массиве, от которого будет отсчитываться интервал
            Intervals interval = null; // массив интервалов для каждого символа
            List<long> alphabet = null;

            alphabet = new List<long>(); // символы, для которых построена последовательность интервалов
            interval = new Intervals();

            for (int i = 0; i < order.Length - 1; i++)
            {
                if (alphabet.Contains(order[i])) continue;
                alphabet.Add(order[i]);
                numChar = i;
                for (int j = i + 1; (j < order.Length); j++)
                {
                    if (order[i] == order[j])
                    {
                        interval.add(alphabet.Count - 1, j - numChar);
                        numChar = j;
                    }
                    if (j == order.Length - 1)
                    {
                        interval.add(alphabet.Count - 1, order.Length - numChar); // привязка к концу
                    }

                }

            }
            // обработка последнего элемента
            if (alphabet.Contains(order[order.Count() - 1])) return interval;
            alphabet.Add(order[order.Count() - 1]);
            interval.add(alphabet.Count - 1, 1);

            interval.associateAlphabet(alphabet);
            
            return interval;
        }

    }
}
